﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TumbaloSoft.Models;
using System.Collections;
using System.Web.Helpers;
using TumbaloSoft.Helpers;
using TumbaloSoft.Helpers.QueryObjects;

namespace TumbaloSoft.Controllers
{
    public class ContometroController : TumbaloController
    {
        private static Object lockObject = new Object();
        public ActionResult Index(int? prIdDepartamento)
        {
            if (defaultAction != null) return defaultAction;

            if(!prIdDepartamento.HasValue) return HttpNotFound();
            Departamento dept;
            try
            {
                dept = HelperDepartamento.selectById(prIdDepartamento.Value);
                if (dept == null) return HttpNotFound();
                ViewBag.ListaContometros = HelperContometro.selectByIdDepartamento(prIdDepartamento.Value);
            }
            catch (Exception ex)
            {
                Logger.Current.Error("error al cargar la lista de lecturas", ex);
                return View("~/Views/Shared/Error.cshtml");
            }
            ViewBag.prIdDepartamento = prIdDepartamento.Value;
            return View();
        }
       
        public ActionResult Registrar(int? prIdDepartamento)
        {
            if (defaultAction != null) return defaultAction;

            if (!prIdDepartamento.HasValue) return HttpNotFound();
            Departamento depa;
            try
            {
                depa = HelperDepartamento.selectById(prIdDepartamento.Value);
            }
            catch(Exception ex)
            {
                Logger.Current.Error("error al cargar un departamento", ex);
                return View("~/Views/Shared/Error.cshtml");
            }
            if (depa == null) return HttpNotFound();
            ViewBag.prIdDepartamento = prIdDepartamento.Value;
            return View();
        }
        

        [HttpPost]
        public ActionResult Registrar(Contometro contometro)
        {
            if (defaultAction != null) return defaultAction;

            if (ModelState.IsValidField("prDepartamento.prIdDepartamento") &&
                    ModelState.IsValidField("prMarca") && ModelState.IsValidField("prMesAnho"))
            {
                contometro.prAnho = contometro.prMesanho.Year;
                contometro.prMes = contometro.prMesanho.Month;

                try
                {
                    List<Contometro> lista = HelperContometro.selectByIdDepartamento(contometro.prDepartamento.prIdInmueble);
                    Contometro cont;
                    if (lista.Count != 0)
                    {
                        cont = lista[0];
                        contometro.prMonto = (contometro.prMarca - cont.prMarca) * 10;
                    }
                    else 
                    {
                        contometro.prMonto = contometro.prMarca * 10;
                    }
                    lock (lockObject)
                    {
                        contometro.prIdContometro=HelperContometro.selectMaxCodigo() + 1;
                        HelperContometro.insert(contometro);
                    }
                    contometro.prDepartamento.prEdificio = HelperContometro.selectEdificio(contometro);
                    ViewBag.mensaje = "Se registró la lectura del contómetro con éxito.";
                    ViewBag.returnURL = "/edificios/modificar?id=" + contometro.prDepartamento.prEdificio.prIdEdificio;
                    return View("~/Views/Shared/Exito.cshtml");
                }
                catch(Exception ex)
                {
                    Logger.Current.Error("error al registrar una lectura", ex);
                    return View("~/Views/Shared/Error.cshtml");
                }
            }
            ViewBag.prIdDepartamento = contometro.prDepartamento.prIdDepartamento;
            return View(contometro);
        }

        public ActionResult Eliminar(int? prIdContometro)
        {
            if (defaultAction != null) return defaultAction;

            if (!prIdContometro.HasValue) return HttpNotFound();
            Contometro cont;
            try
            {
                cont = HelperContometro.selectById(prIdContometro.Value);
            }
            catch(Exception ex)
            {
                Logger.Current.Error("error al cargar una lecturas", ex);
                return View("~/Views/Shared/Error.cshtml");
            }
            if (cont == null) return HttpNotFound();
            ViewBag.prIdDepartamento = cont.prDepartamento.prIdDepartamento;
            return View(cont);
        }

        [HttpPost]
        public ActionResult Eliminar(Contometro cont)
        {
            if (defaultAction != null) return defaultAction;

            try
            {
                HelperContometro.delete(cont.prIdContometro);
            }
            catch(Exception ex)
            {
                Logger.Current.Error("error al eliminar una lectura", ex);
                return View("~/Views/Shared/Error.cshtml");
            }
            ViewBag.mensaje = "Se eliminó la lectura del contómetro con éxito.";
            ViewBag.returnURL = "/Contometro?prIdDepartamento=" + cont.prDepartamento.prIdDepartamento;
            return View("~/Views/Shared/Exito.cshtml");
        }
    }
}
